# mean (years)
mapping <- data %>%  select(state,year,nfatal_r,fatal_r,pop,fatal,nfatal) %>% mutate(state=toupper(state))
map <- mapping %>% group_by(state) %>% summarise(fatal=round(mean(fatal),2),fatal_r_mean=round(mean(fatal_r),2))
## `summarise()` ungrouping output (override with `.groups` argument)
map$hover <- with(map, paste(state, '<br>', "fatal(mean)", fatal, "fatal ratio(mean)", fatal_r_mean))

# give state boundaries a white border
l <- list(color = toRGB("white"), width = 2)
# specify some map projection/options
g <- list(
  scope = 'usa',
  projection = list(type = 'albers usa'),
  showlakes = TRUE,
  lakecolor = toRGB('white')
)

fig <- plot_geo(map, locationmode = 'USA-states')
fig <- fig %>% add_trace(
    z = ~fatal_r_mean, text=~hover,locations = ~state,
    color = ~fatal_r_mean, colors = 'Purples'
  )
fig <- fig %>% colorbar(title = "Number of vehicle fatalities")
fig <- fig %>% layout(
    title = 'US Traffic Fatalities',
    geo = g,
  yaxis = list(type = "log")
  )
fig
# by year
gg <- ggplot(mapping, aes(pop,fatal_r, color = state)) +
  geom_point(aes(size = fatal_r, frame = year, ids = state)) +
  scale_x_log10()
## Warning: Ignoring unknown aesthetics: frame, ids
ggplotly(gg)
data %>% group_by(state) %>% summarise(mean=mean(dry),min=min(dry),max=max(dry)) %>% arrange(desc(mean))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 48 x 4
##    state  mean   min   max
##    <fct> <dbl> <dbl> <dbl>
##  1 ky    42.2  39.1  45.8 
##  2 ar    37.6  35.9  39.6 
##  3 nc    26.2  25.6  27.6 
##  4 al    23.8  23.0  25.0 
##  5 ms    19.0  17.3  20.0 
##  6 pa    10.8  10.7  11.0 
##  7 oh     9.96  9.27 11.6 
##  8 tx     8.16  6.83 11.3 
##  9 il     5.56  4.46  6.40
## 10 me     3.37  3.29  3.57
## # … with 38 more rows
data %>% group_by(state) %>% summarise(count=n())
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 48 x 2
##    state count
##    <fct> <int>
##  1 al        7
##  2 az        7
##  3 ar        7
##  4 ca        7
##  5 co        7
##  6 ct        7
##  7 de        7
##  8 fl        7
##  9 ga        7
## 10 id        7
## # … with 38 more rows
library(AER)
library(plm)
## 
## Attaching package: 'plm'
## The following objects are masked from 'package:dplyr':
## 
##     between, lead
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2018). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.2. https://CRAN.R-project.org/package=stargazer
data %>% filter(state=="ar")
##   state year fatal_r  nfatal_r spirits unemp   beertax drinkage     dry breath
## 1    ar 1982 2.38405 0.4421329    1.19   9.8 0.6503580       21 36.7128     no
## 2    ar 1983 2.39570 0.3784948    1.20  10.1 0.6754587       21 36.4301     no
## 3    ar 1984 2.23785 0.3452683    1.22   8.9 0.5989011       21 36.1040     no
## 4    ar 1985 2.26367 0.3094530    1.12   8.7 0.5773305       21 35.9050     no
## 5    ar 1986 2.54323 0.4555039    0.92   8.7 0.5624355       21 39.5696     no
## 6    ar 1987 2.67588 0.4606366    1.01   8.1 0.5450000       21 39.2879     no
## 7    ar 1988 2.54697 0.3590810    0.99   7.7 0.5245429       21 39.2879     no
##   jail service     pop fatal nfatal
## 1   no      no 2306998   550    102
## 2   no      no 2324999   557     88
## 3   no      no 2346002   525     81
## 4   no      no 2359001   534     73
## 5   no      no 2371000   603    108
## 6   no      no 2388000   639    110
## 7   no      no 2395003   610     86
data %>% select(state,year,fatal_r) %>% group_by(state) %>% summarise(mean=mean(fatal_r),sd=sd(fatal_r),max=max(fatal_r),min=min(fatal_r),range=max(fatal_r)-min(fatal_r)) %>% arrange(desc(sd)) %>% plot_ly(x=~mean, type = "histogram")# %>% plot_ly(x=~state,y=~mean)
## `summarise()` ungrouping output (override with `.groups` argument)
data %>% select(state,year,spirits) %>% group_by(state) %>% summarise(mean=mean(spirits),sd=sd(spirits),max=max(spirits),min=min(spirits),range=max(spirits)-min(spirits)) %>% arrange(desc(max)) %>% plot_ly(x=~mean, type = "histogram")# %>% plot_ly(x=~state,y=~mean)
## `summarise()` ungrouping output (override with `.groups` argument)
data %>% select(state,year,unemp) %>% group_by(state) %>% summarise(mean=mean(unemp),sd=sd(unemp),max=max(unemp),min=min(unemp),range=max(unemp)-min(unemp)) %>% arrange(desc(sd)) %>% plot_ly(x=~mean, type = "histogram")# %>% plot_ly(x=~state,y=~mean)
## `summarise()` ungrouping output (override with `.groups` argument)
data %>% select(state,year,beertax) %>% group_by(state) %>% summarise(mean=mean(beertax),sd=sd(beertax),max=max(beertax),min=min(beertax),range=max(beertax)-min(beertax)) %>% arrange(desc(mean)) %>% plot_ly(x=~mean, type = "histogram")# %>% plot_ly(x=~state,y=~mean)
## `summarise()` ungrouping output (override with `.groups` argument)
data %>% select(state,year,dry) %>% group_by(state) %>% summarise(mean=mean(dry),sd=sd(dry),max=max(dry),min=min(dry),range=max(dry)-min(dry)) %>% arrange(desc(mean)) %>% plot_ly(x=~range, type = "histogram")# %>% plot_ly(x=~state,y=~mean)
## `summarise()` ungrouping output (override with `.groups` argument)
year_breath <- data %>% select(state,year,breath) %>% pivot_wider(
  names_from = year,
  values_from = breath
) %>% as.data.frame()
year_jail <- data %>% select(state,year,jail) %>% pivot_wider(
  names_from = year,
  values_from = jail
) %>% as.data.frame()
library(readr)
library(fdapace)
library(tidyverse)
library(dplyr)
library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
## The following object is masked from 'package:purrr':
## 
##     compact
## The following objects are masked from 'package:plotly':
## 
##     arrange, mutate, rename, summarise
library(fda)
## Loading required package: splines
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## Loading required package: fds
## Loading required package: rainbow
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## The following object is masked from 'package:plotly':
## 
##     select
## Loading required package: pcaPP
## Loading required package: RCurl
## 
## Attaching package: 'RCurl'
## The following object is masked from 'package:tidyr':
## 
##     complete
## The following object is masked from 'package:lmtest':
## 
##     reset
## 
## Attaching package: 'fda'
## The following object is masked from 'package:graphics':
## 
##     matplot
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(ggplot2)
library(fdapace)
# original curves
smooth = data  %>% dplyr::select(state, year, fatal_r) %>% 
  ddply(.(state), mutate, years = 1:length(fatal_r), count_smooth = Lwls1D(bw = 2,
                                    kernel_type = 'epan', 
                                    xin = years, 
                                    yin = fatal_r, 
                                    xout = year))

local_linear <- smooth %>% dplyr::select(state,count_smooth,years) %>%  pivot_wider(
  names_from = state,
  values_from = count_smooth,
  values_fill = list(count_smooth = 0)
) %>% as.data.frame()%>% dplyr::select(-years)


# first-derivative
smooth_1 = data  %>% dplyr::select(state, year, fatal_r) %>% 
  ddply(.(state), mutate, years = 1:length(fatal_r), count_smooth = Lwls1D(bw = 2,
                                    kernel_type = 'epan', 
                                    xin = years, 
                                    yin = fatal_r, 
                                    xout = year,
                                    nder = 1))

local_linear_1 <- smooth_1 %>% dplyr::select(state,count_smooth,years) %>%  pivot_wider(
  names_from = state,
  values_from = count_smooth,
  values_fill = list(count_smooth = 0)
) %>% as.data.frame()%>% dplyr::select(-years)

par(mfrow=c(1,2))
matplot(1:7,local_linear, type = "l", lty = 1, xlab='years', ylab= 'fatal_ratio (y)',main = list("Smoothed original curves", cex = 0.8, font = 4))
matplot(1:7,local_linear_1, type = "l", lty = 1, xlab='years', ylab= 'Dy',main = list("First derivative original curves", cex = 0.8, font = 4))